package edu.cque.jt.provider.service;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.stereotype.Service;

/**
 * @author Hua
 * @create 2022-07-24 17:17
 */
@Service
public class ResourceService {
    /**
    1. 使用@sentinelResource描述的方法,在此方法被访问时,会在sentinel的簇点链路中显示
    2. 此注解指定的名字就是资源名
    3. 可以对这个资源的访问 按照指定的链路进行限流设计.

    4. blockHandlerClass用于指定 出现限流异常 时的异常处理类
     5. blockHandler属性用于指定异常处理类中的方法(此方法的返回类型,参数,要与sentinelResource注解描述的方法一致,
     参数类型可以加异常类型,而且方法必须是静态)
    *6.
     fallBackClass 用于指定业务异常类型,fallBack用于指向业务处理类中的异常处理方法
     (此方法的返回类型,参数要与@SentinelResource注解描述的方法参数一致,可以加Throwable异常类型参数)

     总结:
        blockHandlerClass只能处理限流异常,其余的业务异常可以用fallBackClass来处理.
        除此之外,也可以写mvc的统一异常处理
        使用该注解后,发生的限流异常也就可以使用自定义的异常处理机制
     */
    @SentinelResource(value = "doGetResource",
            blockHandlerClass =ResourceBlockHandler.class,blockHandler ="call" ,
            fallbackClass = FallbackHandler.class,fallback = "call"
    )
    public String doGetResource(){
//        int a= 3/0;
        return "doGetResource";
    }
}
